import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 完美数
 * 对于一个 正整数，如果它和除了它自身以外的所有 正因子 之和相等，我们称它为 「完美数」。
 * 给定一个 整数 n， 如果是完美数，返回 true，否则返回 false
 *
 * 示例1
 * 输入：num = 28
 * 输出：true
 * 解释：28 = 1 + 2 + 4 + 7 + 14
 * 1, 2, 4, 7, 和 14 是 28 的所有正因子。
 *
 * 测试用例
 * 输入：num = 6
 * 输出：true
 * 输入：num = 496
 * 输出：true
 * 输入：num = 8128
 * 输出：true
 * 输入：num = 2
 * 输出：false
 */
public class Num507 {

    public static void main(String[] args) {
        System.out.println(checkPerfectNumber(8128));
    }

    //主要实现方法
    public static boolean checkPerfectNumber(int num) {
        int max=num;
        ArrayList<Integer> minList = new ArrayList<>();
        minList.add(1);
        ArrayList<Integer> maxList = new ArrayList<>();
        for (int i = 2; i < max; i++) {
            if (num % i == 0) {
                maxList.add(num / i);
                max = num / i;
                minList.add(i);
            }
        }
        if (maxList.isEmpty()) {
            return false;
        } else {
            return num == getTotal(minList) + getTotal(maxList);
        }

    }

    //工具方法，输入列表，返回列中数据的总和
    private static int getTotal(List<Integer> arrayList) {
        Iterator<Integer> iterator = arrayList.iterator();
        int total = 0;
        while (iterator.hasNext()) {
            total += iterator.next();
        }
        return total;
    }
}
